/******ARCHIVO CABECERA DE NUESTRO CODIGO DE TABLA HASH*****/

#ifndef __LAHAROT01ef_H_


///MACROS

#define __LAHAROT01ef_H_
#define TRUE 1
#define FALSE 0
#define MAX_LINEA 200


///ESTRUCTURAS

typedef struct _TablaHS
{
     char *Clave;
     double Calif;
     char razonDesc[3];
     long int contLlam;  
     long int razonDescon[14];
     struct _TablaHS *sig;
}TablaHS;

///PROTOTIPOS DE FUNCION

//Funcion que nos genera un nodo de la estructura para la tabla hash 
extern TablaHS *new_TablaHS();

//FUNCION QUE AGREGA ELEMENTOS A LA TABLA
//extern void addToHash(TablaHS *);
extern void  addToHash(char *, float, char *, long int);

//FUNCION QUE LIMPIA LA TABLA HASH
extern void clearHash();

//FUNCION QUE NOS AGREGA EN LA LISTA ELEMENTOS POR ENCADENAMIENTO SEPARADO DADA UNA COLISION
extern void addToList(TablaHS *, TablaHS *);

//FUNCION QUE NOS BUSCA LA CLAVE LADA SERIE
extern TablaHS *getkey(char *);

//FUNCION QUE NOS HACE EL CALCULO DE LA POSICION QUE SE LE VA A ASIGNAR A CADA CLAVE
extern long int calculaIndice_rot_hash (char *);

//FUNCION QUE NOS BUSCA CLAVES DENTRO DE LA LISTA
extern TablaHS *findInList(TablaHS *, char *);

//FUNCION PARA LA APERTURA DE LOS ARCHIVOS
extern int abreArchivos(char *, char *, char *);

//FUNCION PARA LA APERTURA DEL ARCHIVO DE CONFIGURACION
extern int abreArchivoConfiguracion(char *);

//FUNCION QUE NOS CARGA EL CATALOGO A  MEMORIA
extern int cargaCatalogo();

//FUNCION QUE NOS SIRVE PARA BUSCAR SEPARADORES DENTRO DE UNA CADENA
extern void Busca_sep(char *, char *, char, int);

//FUNCION QUE NOS CORTA CADENAS
extern void substr(char *, char *, int, int);

//FUNCION QUE NOS BUSCA LOS ELEMENTOS EN LA TABLA Y NOS IMPRIME TODOS LOS NODOS DEL ARCHIVO DE ENTRADA
extern void comparaArchivoHash();

//FUNCION QUE NOS SIRVE PARA CARGAR LAS PROPIEDADES DE UN ARCHIVO DE CONFIGURACION PREDEFINIDO
extern int cargaPropiedades();

//FUNCION QUE NOS SIRVE PARA TRANSFORMAR EL FORMATO QUE TRAE EL CAMPO DE DURACION DE LLAMADAS A SEGUNDOS
extern long int formatoToSeg(char *);

//FUNCION QUE TRANSFORMA LOS SEGUNDOS ACUMULADOS AL FORMATO DEL CAMPO DE DURACION DE LLAMADAS
extern void segToFormato(char *, long int);

//FUNCION QUE NOS VALIDA QUE LAS FECHAS SEAN CORRECTAS 
// Espera fechas con el formato aammdd, retorna 1 si esta correcta, 0 si no
extern int valida_fecha(char *);

//FUNCION QUE NOS COMPARA LAS DIFERENTES RAZONES DE DESCONEXION PARA SELECCIONAR 
//Y ASI PODER PROCESAR LA RAZON QUE NOS VAYA LLEGANDO Y ACUMULARLA DE MANERA ADECUADA  
extern int selectRadex(double , char *);

//FUNCION QUE NOS IMPRIME LA SALIDA DE LOS CAMPOS ACUMULADOS CON SUS RESPECTIVAS RAZONES DE DESCONEXION
extern void imprimeIntentos();

//FUNCION QUE NOS MUESTRA LA SALIDA DE LA SUMA DE LOS MINUTOS Y EL CONTEO DE LLAMADAS DEL ARCHIVO DE ENTRADA 
extern void imprimeSumaCont();

//FUNCION QUE NOS MUESTRA COMO SE LE ASIGNAN LOS LUGARES A LAS CLAVES POR CADA UNO DE LOS NODOS DE LA TABLA HASH
extern void imprimeHash();

//FUNCION QUE NOS LIBERA LA MEMORIA
extern void cleanupHash();

//FUNCION QUE NOS JUNTA ESPACIOS EN UNA CADENA
extern void ANStrim(char * ,char *);

//FUNCION QUE NOS BUSCA INFORMACION PARA PODER REALIZAR UN FILTRO PARA UNA SALIDA ESPECIFICA DE ALL ESPEC

extern int seleccionadorFiltroArea(char *);

#endif
